package com.kikt.animationdemo;

import android.os.Handler;

import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.ValueAnimator;

/**
 * Created by kikt on 2016/1/16.
 */
public class AnimatorUtils {

    /**
     * 一个“两段执行”的动画
     * 动画不会自动开始
     *
     * @param duration 动画的持续时间
     * @param start    动画的开始数值
     * @param mid      动画的中间数值
     * @param end      动画的结束数值
     * @param delay    动画中间的停顿时间
     * @param listener 动画的过程侦听
     * @return 动画
     */
    public static ValueAnimator getAnimator(final int duration, int start, final int mid, final int end, final int
            delay,
                                            final OnUpdateListener listener) {
        final ValueAnimator animator = new ValueAnimator();
        animator.setDuration(duration).setFloatValues(start, mid);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                listener.onUpdate((Float) animation.getAnimatedValue());
            }
        });
        animator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                listener.onFirstStart();
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                animator.removeListener(this);
                listener.onFirstEnd();
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        animator.setFloatValues(mid, end);
                        listener.onSecondStart();
                        animator.start();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                listener.onSecondEnd();
                            }
                        }, duration);
                    }
                }, delay);
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });

        return animator;
    }

    /**
     * Created by kikt on 2016/1/16.
     * 动画更新的侦听
     */
    public interface OnUpdateListener {
        /**
         * @param value 动画的数值，随动画的变化而改变
         */
        void onUpdate(float value);

        /**
         * 第一段动画开始
         */
        void onFirstStart();

        /**
         * 第一段动画结束
         */
        void onFirstEnd();

        /**
         * 第二段动画开始
         */
        void onSecondStart();

        /**
         * 第二段动画结束
         */
        void onSecondEnd();
    }
}
